from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver


class BasePage:
    """
    BasePage 提供公共方法，即和页面逻辑无关的封装
    比如解决driver 初始化的问题
    """
    # 添加base url, 可以支持测试用例灵活配置起始页
    # 使得base page 完全和业务逻辑解耦
    #   子类会覆盖父类的类变量
    _base_url = ''  # 加单下划线代表私有
    def __init__(self,base_driver = None):
        if base_driver is None:
            # 通过remote 复用浏览器
            chrome_arg = webdriver.ChromeOptions()
            # 加入调试地址
            chrome_arg.debugger_address = 'localhost:9222'
            # 实例化driver 对象
            self.driver = webdriver.Chrome(options=chrome_arg)
            # 打开首页
            # self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
            self.driver.get(self._base_url)
            self.driver.implicitly_wait(5)
        else:
            # 将self.driver 添加一个WebDriver 对象注解，解决类型提示问题
            # 注解本身没有任何的赋值作用，方便IDE 操作
            self.driver: WebDriver = base_driver

    def find(self, by, locator=None):
            # 如果只传入一个元组参数
            if locator is None:
                return self.driver.find_element(*by)
            # 适配多种传参情景
            else:
                return self.driver.find_element(by=by,value=locator)